package de.g18.llmaa.gui.workspace;

import java.util.ArrayList;

import de.g18.llmaa.gui.IApp_Beobachter;
import de.g18.llmaa.gui.workspace.internalFrame.Abstract_InternalFrame;

/**
 * Schnitstelle zum Workspace Model, dieses sollte einzigartig sein, da es
 * schließlich nur einen Workspace giebt. Dass wird durch ein geregelten
 * Sigleton aufruf einer Instanze der objektes {@link Workspace_Crtl}
 * 
 * @author Gruppe LLMAA
 * 
 */
public interface IWorkspace_Model extends IApp_Beobachter {

	/**
	 * Registrierung eines Beobachters welcher über veränderungen der
	 * Anzuzeigenden Fenster Informiert wird.
	 * 
	 * @param beobachter
	 * 			{@link IWorkspace_Beobachter} der hinzuzufügende Beobachter
	 */
	void registerBeobachter(IWorkspace_Beobachter beobachter);

	/**
	 * Hinzufügen eines neu Anzuzeigenden Fensters.
	 * @param internalFrame
	 * 			{@link Abstract_InternalFrame} welcher hinzugefügt werden soll.
	 */
	void addInternalFrame(Abstract_InternalFrame internalFrame);

	/**
	 * Getter für alle Sichtbaren Fenster
	 * @return
	 * 		{@link ArrayList} mit allen sichtbaren Fenstern.
	 */
	ArrayList<Abstract_InternalFrame> getList_VisibleFrames();

	/**
	 * Entfernen eines Internal Frames
	 * @param internalFrame
	 * 			Das zu entfernende Fenster
	 */
	void removeInternalFrame(Abstract_InternalFrame internalFrame);

}
